package com.hu.hrm.fallback;

import com.hu.hrm.feignclients.RedisFeignClient;
import com.hu.hrm.util.AjaxResult;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

/*
* 注意泛型和标签
* */
@Component
public class RedisFeignClientFallbackFactory implements FallbackFactory<RedisFeignClient> {

    @Override
    public RedisFeignClient create(Throwable throwable) {
        //create方法 它需要返回这个RedisFeignClient 所以就new一个，但是RedisFeignClient是一个接口，那么用匿名内部类的方式解决
        //快速匿名内部类： new RedisFeignClient(); 快捷键:alt+insert 提示中 实现这个方法  然后匿名内部类就会复写这个RedisFeignClient中的方法
        //然后直接返回就行了
        return new RedisFeignClient() {
            //托底方法
            @Override
            public AjaxResult set(String key, String value) {
                //查询数据中的数据，返回这个信息饥渴
                throwable.printStackTrace();
                return AjaxResult.me().setSuccess(false).setMessage("Redis服务不可用["+throwable.getMessage()+"]");
            }

            //托底方法
            @Override
            public AjaxResult get(String key) {
                //查询数据中的数据，返回这个信息即可
                throwable.printStackTrace();
                return AjaxResult.me().setSuccess(false).setMessage("Redis服务不可用["+throwable.getMessage()+"]");
            }

            @Override
            public AjaxResult setex(String key, int seconds, String value) {
                //查询数据中的数据，返回这个信息饥渴
                throwable.printStackTrace();
                return AjaxResult.me().setSuccess(false).setMessage("Redis服务不可用["+throwable.getMessage()+"]");
            }
        };
    }

}
